package com.lzh.template.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.lzh.template.common.BaseResponse;
import com.lzh.template.model.dto.user.LoginUserDto;
import com.lzh.template.model.dto.user.UpdateUserPasswordDto;
import com.lzh.template.model.dto.user.UserRegisterDto;
import com.lzh.template.model.entity.User;
import com.lzh.template.model.vo.user.LoginUserVo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * 用户表(User)表服务接口
 *
 * @author makejava
 * @since 2022-09-26 16:50:18
 */
public interface UserService extends IService<User> {

    /**
     * 登录
     * @param dto
     * @return
     */
    BaseResponse<Map<String, Object>> login(LoginUserDto dto);

    /**
     * 获取注册验证码
     *
     * @param email 邮箱
     * @return
     */
    BaseResponse<Object> getEmailCode(String email);

    /**
     * 用户注册
     *
     * @param dto
     * @return
     */
    BaseResponse regist(UserRegisterDto dto);

    /**
     * 退出登录
     *
     * @return
     */
    BaseResponse logout();

    /**
     * 根据用户id获取用户
     *
     * @param userId
     * @return
     */
    User getUserById(Long userId);

    /**
     * 更新用户头像
     *
     * @param userId
     * @param avatar
     * @return
     */
    BaseResponse<Object> updateUserAvatar(Long userId, String avatar);

    /**
     * 更新用户密码
     *
     * @param dto
     * @return
     */
    BaseResponse updateUserPassword(UpdateUserPasswordDto dto);

    /**
     * 重置密码
     *
     * @param email       邮箱
     * @param newPassword 新密码
     * @param conPassword 确认密码
     * @return
     */
    BaseResponse rePassword(String email, String newPassword, String conPassword);

    /**
     * 注销账号
     *
     * @param userId 用户id
     * @return
     */
    BaseResponse<Object> cancelAccount(Long userId);

    User getUserByUserName(String userName);

    String getUserNameByUserId(Long createBy);

    List<User> listUserByName(String name);

    /**
     * 获取登录用户信息
     *
     * @param request
     * @return
     */
    LoginUserVo getLoginUser(HttpServletRequest request);

    /**
     *
     * @param user
     * @return
     */
    LoginUserVo getLoginUserVo(User user);
}

